/*
 * ImageManager.hpp
 * This file is part of Dragon and Weed 2
 *
 * Copyright (C) 2011 - François Berder
 *
 * Dragon and Weed 2 is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * Dragon and Weed 2 is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 */



#ifndef IMAGEMANAGER_HPP_INCLUDED
#define IMAGEMANAGER_HPP_INCLUDED

#include "RessourceManager.hpp"
#include <SFML/Graphics.hpp>

typedef boost::shared_ptr<sf::Image> ImagePtr;

/** \class ImageManager
    \brief This a resource manager specialized in handling with images

    \note It's a singleton class.
*/
class ImageManager : public RessourceManager<sf::Image>
{
	public :

	/** \return A reference to the unique instance of this class. */
	static ImageManager& instance();

    /** \brief Load an image from its definition
        \param resDef The definition of the image to load

        \note Only the name is relevant in its definition.
    */
	bool loadRessource(RessourceDef& resDef);

	/** \brief Load an image from memory.
        \param fileName The name of the image.
        \param data The pointer to the beginning of the image.
        \param size The size (in bytes) of the image.
	*/
	bool loadRessourceFromMemory(const std::string& fileName, char* data,const size_t size);

	private :

   	/** \brief Default private constructor */
	ImageManager();

   	/** \brief Default private destructor */
	~ImageManager();

};

#endif
